#include "exti.h"
// #include "delay.h"
// #include "key.h"
// #include "led.h"
int encoder_L = 0;
int encoder_R = 0;
/*
函数功能：初始化外部中断
输入：无
输出：无
备注：用于编码器测速
      左电机：P4.5  P4.6
      右电机：P5.4  P5.5
*/
void encoding_Init(void)
{
    /*开启外部中断*/
    GPIO_enableInterrupt(GPIO_PORT_P4, GPIO_PIN6);
    GPIO_enableInterrupt(GPIO_PORT_P4, GPIO_PIN5);
    // GPIO_clearInterruptFlag()
    GPIO_clearInterruptFlag(GPIO_PORT_P4, GPIO_PIN6);
    GPIO_clearInterruptFlag(GPIO_PORT_P4, GPIO_PIN5);
    
    GPIO_enableInterrupt(GPIO_PORT_P5, GPIO_PIN4);
    GPIO_enableInterrupt(GPIO_PORT_P5, GPIO_PIN5);
    /*使能端口中断*/
    Interrupt_enableInterrupt(INT_PORT4);
    Interrupt_enableInterrupt(INT_PORT5);
    /*设置GPIO的触发方式*/ /*A相*/
    /*P4.5  P4.6*/
    GPIO_interruptEdgeSelect(GPIO_PORT_P4, GPIO_PIN6, GPIO_LOW_TO_HIGH_TRANSITION);
    GPIO_interruptEdgeSelect(GPIO_PORT_P4, GPIO_PIN5, GPIO_LOW_TO_HIGH_TRANSITION);
    /*设置GPIO的触发方式*/ /*B相*/
    /*P5.4  P5.5*/
    GPIO_interruptEdgeSelect(GPIO_PORT_P5, GPIO_PIN4, GPIO_LOW_TO_HIGH_TRANSITION);
    GPIO_interruptEdgeSelect(GPIO_PORT_P5, GPIO_PIN5, GPIO_LOW_TO_HIGH_TRANSITION);
    /*A相   配置上拉输入*/
    GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P4, GPIO_PIN6);
    GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P4, GPIO_PIN5);
    /*B相*/
    GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P5, GPIO_PIN4);
    GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P5, GPIO_PIN5);
    
//    Interrupt_enableMaster();
}
/*
函数功能：Port4中断服务函数
输入：无
输出：无
备注：用于左轮编码器测速
*/
void PORT4_IRQHandler(void)
{
    uint16_t flag;
    flag = GPIO_getEnabledInterruptStatus(GPIO_PORT_P4);
    GPIO_clearInterruptFlag(GPIO_PORT_P4, flag);
//    encoder_L=20;
    /*A相*/
    if (flag & GPIO_PIN6)
    {
        if (GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN5) == 0)
            encoder_L--;
        else if (GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN5) == 1)
            encoder_L++;
    }

    /*B相*/
    if (flag & GPIO_PIN5)
    {
        if (GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN6) == 0)
            encoder_L++;
        else if (GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN6) == 1)
            encoder_L--;
    }
}
/*
函数功能：Port5中断服务函数
输入：无
输出：无
备注：用于右轮编码器测速
*/
void PORT5_IRQHandler(void)
{
    uint16_t flag;
    flag = GPIO_getEnabledInterruptStatus(GPIO_PORT_P5);
    GPIO_clearInterruptFlag(GPIO_PORT_P5, flag);
    /*A相*/
    if (flag & GPIO_PIN4)
    {
        if (GPIO_getInputPinValue(GPIO_PORT_P5, GPIO_PIN5) == 0)
            encoder_R++;
        else if (GPIO_getInputPinValue(GPIO_PORT_P5, GPIO_PIN5) == 1)
            encoder_R--;
    }

    /*B相*/
    if (flag & GPIO_PIN5)
    {
        if (GPIO_getInputPinValue(GPIO_PORT_P5, GPIO_PIN4) == 0)
            encoder_R--;
        else if (GPIO_getInputPinValue(GPIO_PORT_P5, GPIO_PIN4) == 1)
            encoder_R++;
    }
}
/*
函数功能：读取左轮速度
输入：无
输出：无
备注：
        左电机：P4.5  P4.6
*/
int read_L(void)
{
    // encoder_L = encoder_L <= 0 ? (-encoder_L) : encoder_L;
    int contus;
    contus=encoder_L;
    encoder_L=0;
    return contus;
}
/*
函数功能：读取右轮速度
输入：无
输出：无
备注：
        右电机：P5.4  P5.5
*/
int read_R(void)
{
    // encoder_R = encoder_R <= 0 ? (-encoder_R) : encoder_R;
    int contus;
    contus=encoder_R;
    encoder_R=0;
    return contus;
}

